home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / game / cdr_100 / cdr_100.bas < prev    next >
BASIC Source File  |  1995-07-08  |  21KB  |  522 lines

  1. 10 '★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
  2. 20 '
  3. 30 '     <<  CAR DOG R  >>  - Version 1.00 -
  4. 40 '
  5. 50 '----------------------------------------------------------------
  6. 60 '             Programed by      KAMA
  7. 70 '★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
  8. 80 '
  9. 90 *初期設定:'######################################################
  10. 100 CLS:CLEAR:RANDOMIZE TIME:DEFINT H-N
  11. 110 CNFFILE$="cdr_100.cnf":RNKFILE$="cdr_100.rnk"
  12. 120 TMODE=INP(&H5EC)
  13. 130 ON ERROR GOTO *エラー処理
  14. 140 OPEN "I",1,CNFFILE$:INPUT #1,MODE,WT:CLOSE
  15. 150 *コンフィグファイル作成から復帰
  16. 160 OUT &H5EC,MODE
  17. 170 GOSUB *変数設定1
  18. 180 GOSUB *ランキングファイルのオープン:GOSUB *ランキングファイルのロード
  19. 190 GOSUB *パターン設定
  20. 200 *復帰地点
  21. 210 GOSUB *タイトル画面
  22. 220 *ラウンドスタート
  23. 230 GOSUB *マップ紹介
  24. 240 GOSUB *変数設定2
  25. 250 GOSUB *画面設定
  26. 260 GOSUB *マップ読み込み
  27. 270 GOSUB *キャラクタ設定
  28. 280 GOSUB *スクロール:GOSUB *キャラクタ表示
  29. 290 GOSUB *レーススタート
  30. 300 *メインルーチン:'################################################
  31. 310 WHILE DD=0
  32. 320   PD=PAD(1):PT=PTRIG(1)                         :'パッド読み取り
  33. 330   GOSUB *スリップ処理
  34. 340   MH=(MH+((PD=7)-(PD=3))*PHN)AND 255            :'方向決定
  35. 350   XN=CN(MH)*PAA:YN=SN(MH)*PAA
  36. 360   IF PT=1 THEN VX=VX+XN:VY=VY+YN                :'アクセル
  37. 370   VV=SQR(VX^2+VY^2):IF VV>PVX THEN VV=PVX       :'速度決定
  38. 380   X1=0:Y1=0:X2=VX:Y2=VY:GOSUB *方向チェック
  39. 390   IF PT=2 THEN BR=PBR ELSE BR=PEB               :'ブレーキ
  40. 400   VX=CN(HK)*VV*BR:VY=SN(HK)*VV*BR               :'移動量
  41. 410   MPX=MPX+VX/PZZ:MPY=MPY+VY/PZZ                 :'マップ座標変更
  42. 420   GOSUB *当たり判定
  43. 430   MHI=MH+4 AND 255:MHP=INT(MHI/8)      :'表示キャラ決定
  44. 440   GOSUB *キャラクタ表示
  45. 450   IF GOAL=1 THEN
  46. 460     GPOINT=GPOINT+1:IF GPOINT>100 THEN *ゴール
  47. 470   ELSE IF GOAL=-1 THEN
  48. 480      SPRITE 6,216,4,0:TIM=TIM+1
  49. 490      SPOINT=SPOINT+1:IF SPOINT>30 THEN SPRITE 0,216,0:GOAL=0
  50. 500   ELSE
  51. 510     TIM=TIM+1:IF TIM>9999 THEN WAIT 100:GOTO *ゲームオーバー
  52. 520   ENDIF
  53. 530   IF PT=4 THEN GOSUB *ポーズ
  54. 540   IF WT<>0 THEN
  55. 550     FOR I=0 TO WT*300:NEXT
  56. 560   ENDIF
  57. 570   GOSUB *スクロール
  58. 580 WEND
  59. 590 PCMPLAY DOKAN%:WAIT 100
  60. 600 *ゲームオーバー:'################################################
  61. 610   WHILE PTRIG(1)=0:WEND
  62. 620   CLS:SCREEN@ 1:PUT@A(0,0)-(39,29),MPT,PSET,8,8
  63. 630   SYMBOL (23,70),"GAME OVER",2,2,7,0,PSET,9
  64. 640   SYMBOL (115,150),"PUSH BUTTON",1,1,[0,150,0],0,PSET,9
  65. 650   PCMPLAY GAMOV%:WAIT 200
  66. 660   WHILE PTRIG(1)=0:WEND
  67. 670   IF PTRIG(1)>=8 THEN
  68. 680     GOTO *タウンズOSに戻る
  69. 690   ENDIF
  70. 700   PLAY "t280v8o4c16":WAIT 100:GOTO *復帰地点
  71. 710 END
  72. 720 '### サブルーチン ###############################################
  73. 730 *当たり判定:'----------------------------------------------------
  74. 740 XO=X:YO=Y:X=(MPX)\16+20:Y=(MPY)\16+15:GET@A(X,Y)-(X,Y),MPC
  75. 750 IF MPC(0)=&H5299 THEN 
  76. 760   VX=-VX:VY=-VY
  77. 770   PCMPLAY KAN%
  78. 780 ELSE IF MPC(0)=&H4504 OR MPC(0)=&H4104 OR MPC(0)=&H2104 THEN
  79. 790   DD=1
  80. 800 ELSE IF MPC(0)=&H3904 OR MPC(0)=&H3D04 OR MPC(0)=&H5504 THEN
  81. 810   DD=1
  82. 820 ELSE IF MPC(0)=&H318F THEN
  83. 830   VX=VX/1.2!:VY=VY/1.2!
  84. 840 ELSE
  85. 850   A=ABS(VV+HDL)\5000:IF A>20 THEN A=20
  86. 860   IF A<>0 THEN PASTEL A:LINE (XO,YO)-(X,Y),PASTEL,[50-A,50-A,50-A]:'タイヤの跡をつける
  87. 870   IF A=0 THEN
  88. 880     IF GOAL=0 THEN PLAY OFF
  89. 890   ELSE IF PLAY(2)=0 AND A>0 THEN
  90. 900     PCMPLAY SLIP%:VX=VX*.99!:VY=VY*.99!
  91. 910   ENDIF
  92. 920   '--- ラップの判定 ---------------------------------------------
  93. 930   CHKOLD=CHK
  94. 940   IF MPX<4759 AND MPX>=3759 AND MPY>3088 THEN
  95. 950     CHK=2:'----- まだゴールしてない
  96. 960   ELSE IF MPX<3759 AND MPX>=2759 AND MPY>3088 THEN
  97. 970     CHK=1:'----- ライン越えた
  98. 980   ELSE
  99. 990     CHK=0:'----- その他の場所
  100. 1000   ENDIF
  101. 1010   IF CHKOLD=2 AND CHK=1 THEN
  102. 1020     IF GLAP=0 THEN
  103. 1030       LAP=LAP+1:PLAY "t280v15o5c16"
  104. 1040       IF LAP>=MLAP THEN
  105. 1050         PCMPLAY GOAL%:GOAL=1:GPOINT=0
  106. 1060         SPRITE 6,232,90,100:SPRITE 0,232,1
  107. 1070       ELSE IF LAP=MLAP-1 THEN
  108. 1080         GOSUB *ラップ消去:SPRITE 0,248,1
  109. 1090       ELSE
  110. 1100         GOSUB *ラップ消去:SPRITE 0,312+LAP*12,1
  111. 1110       ENDIF
  112. 1120     ELSE
  113. 1130       GLAP=0
  114. 1140     ENDIF
  115. 1150   ELSE IF CHKOLD=1 AND CHK=2 THEN
  116. 1160     GLAP=1
  117. 1170   ENDIF
  118. 1180   '--------------------------------------------------------------
  119. 1190 ENDIF
  120. 1200 RETURN
  121. 1210 *ラップ消去
  122. 1220   FOR I=0 TO 4
  123. 1230     SPRITE 0,312+I*12,0
  124. 1240   NEXT
  125. 1250 RETURN
  126. 1260 *スリップ処理:'--------------------------------------------------
  127. 1270   IF PT=2 AND VV>100 THEN
  128. 1280     HDL=HDL+1000
  129. 1290   ELSE IF PD=7 OR PD=3 THEN
  130. 1300     HDL=HDL+500
  131. 1310   ELSE
  132. 1320     HDL=HDL-3000:IF HDL<0 THEN HDL=0
  133. 1330   ENDIF
  134. 1340   IF HDL>30000 THEN HDL=30000
  135. 1350 RETURN
  136. 1360 *方向チェック:'--------------------------------------------------
  137. 1370 XA=INT(X2-X1):YA=INT(Y2-Y1)
  138. 1380 IF XA<>0 THEN
  139. 1390   YX=YA/XA:AT=ATN(YX)
  140. 1400   HK=((AT*256)/(3.14159!*2))+64 AND &HFE
  141. 1410   IF X1>X2 THEN HK=HK+128 AND &HFE
  142. 1420 ELSE
  143. 1430   HK=0:IF Y1<Y2 THEN HK=128
  144. 1440 ENDIF
  145. 1450 RETURN
  146. 1460 *キャラクタ表示:'------------------------------------------------
  147. 1470   DEF SPRITE 1,100,(PX,PY),4*MHP,1,1
  148. 1480   SPRITE 0,100,1
  149. 1490   '--- タイムのスプライト設定 
  150. 1500   A1=TIM\1000:A2=(TIM-A1*1000)\100
  151. 1510   A3=(TIM-A1*1000-A2*100)\10:A4=TIM-A1*1000-A2*100-A3*10
  152. 1520   DEF SPRITE 1, 0,( 0,206),128+A1*4
  153. 1530   DEF SPRITE 1, 4,(16,206),128+A2*4
  154. 1540   DEF SPRITE 1, 8,(32,206),128+A3*4
  155. 1550   DEF SPRITE 1,12,(48,206),128+A4*4
  156. 1560   SPRITE 0,0,1:SPRITE 0,4,1:SPRITE 0,8,1:SPRITE 0,12,1
  157. 1570 RETURN
  158. 1580 *ポーズ:'--------------------------------------------------------
  159. 1590   PLAY "t280v10o5c16d16e16f16g16":WAIT 30
  160. 1600   *PAUSEROOP
  161. 1610   IF PTRIG(1)>7 THEN *復帰地点
  162. 1620   IF PTRIG(1)<>4 THEN *PAUSEROOP
  163. 1630   PLAY "t280v10o5c16d16e16f16g16":WAIT 30
  164. 1640 RETURN
  165. 1650 *ゴール:'--------------------------------------------------------
  166. 1660   WAIT 100:SPRITE 0,232,1:WHILE PTRIG(1)=0:WEND
  167. 1670   CLS:SCREEN@ 1:PUT@A(0,0)-(39,29),MPT,PSET,8,8
  168. 1680   SYMBOL (23,60),"Your time is"+STR$(TIM),2,2,7,0,PSET,9
  169. 1690   IF TIM<RTM(COURSE-1) THEN
  170. 1700     RTM(COURSE-1)=TIM
  171. 1710     SYMBOL (20,100),"This is BEST TIME!",2,2,[100,230,100],0,PSET,9
  172. 1720     GOSUB *ネームエントリー
  173. 1730   ENDIF
  174. 1740   SYMBOL (115,210),"PUSH BUTTON",1,1,[0,150,0],0,PSET,9
  175. 1750   WHILE PTRIG(1)=0:WEND
  176. 1760   PLAY "t280v8o4c16":WAIT 100:GOTO *復帰地点
  177. 1770 *レーススタート:'------------------------------------------------
  178. 1780   SPRITE 0,300,1:SPRITE 0,312,1
  179. 1790   SPRITE 6,200,460,100:SPRITE 0,200,1:PCMPLAY READY%
  180. 1800   FOR I=0 TO 142 STEP 2:SPRITE 6,200,2,0:WAIT 1:NEXT
  181. 1810   WAIT 50:SPRITE 0,200,0:GOAL=-1:SPOINT=0
  182. 1820   SPRITE 6,216,90,100:SPRITE 0,216,1:PCMPLAY START%
  183. 1830 RETURN
  184. 1840 *変数設定1:'####################################################
  185. 1850   DIM MPT(3071),MPC(0),PAT%(255)
  186. 1860   DIM SN(255),CN(255)
  187. 1870   DIM RNA$(9),RTM(9),CH$(70)
  188. 1880   DIM PATG1%(1024),PATG2%(1072)
  189. 1890   DEF FNBR=.0245436926062#
  190. 1900   FOR KA=0 TO 255:SN(KA)=SIN(FNBR*(KA-64)):CN(KA)=COS(FNBR*(KA-64)):NEXT
  191. 1910   DIM SLIP%(4550),KAN%(1500),LETSGO%(5300)
  192. 1920   DIM DOKAN%(5300),GAMOV%(4900),BYE%(4600)
  193. 1930   DIM GOAL%(4600),READY%(2700),START%(2600)
  194. 1940   LOAD@ "slip.snd",SLIP%
  195. 1950   LOAD@ "kan.snd",KAN%
  196. 1960   LOAD@ "letsgo.snd",LETSGO%
  197. 1970   LOAD@ "dokan.snd",DOKAN%
  198. 1980   LOAD@ "gamov.snd",GAMOV%
  199. 1990   LOAD@ "byebye.snd",BYE%
  200. 2000   LOAD@ "goal.snd",GOAL%
  201. 2010   LOAD@ "ready.snd",READY%
  202. 2020   LOAD@ "go.snd",START%
  203. 2030   MN1=0
  204. 2040   FOR I=0 TO 9:CH$(I)=CHR$(48+I):NEXT
  205. 2050   FOR I=0 TO 25:CH$(10+I)=CHR$(65+I):NEXT
  206. 2060   A$=" !#$%&'()*+,-./:;<=>?[\]^_・{|}~ "
  207. 2070   FOR I=1 TO 32:CH$(35+I)=MID$(A$,I,1):NEXT
  208. 2080 RETURN
  209. 2090 *タイトル画面:'##################################################
  210. 2100   CLS:SCREEN@ 1
  211. 2110   LINE (0,0)-(639,479),PSET,[40,40,80],BF
  212. 2120   SYMBOL (30,30),"CAR DOG R",2,4,[230,230,230],0,PSET,9
  213. 2130   SYMBOL (120,120),"GAME START",1,1,[0,150,0],0,PSET,9
  214. 2140   SYMBOL (120,140),"RANKING",1,1,[0,150,0],0,PSET,9
  215. 2150   SYMBOL (120,160),"CONFIGRATION",1,1,[0,150,0],0,PSET,9
  216. 2160   SYMBOL (120,180),"QUIT",1,1,[0,150,0],0,PSET,9
  217. 2170   SYMBOL(60,210),"1995  KAMA presents",1,1,[220,140,240],0,PSET,9
  218. 2180   SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
  219. 2190   OUT &HFDA0,&HF,1
  220. 2200   START=0:WHILE START<>1               :'パッド待ち
  221. 2210     PD=PAD(1):PT=PTRIG(1)
  222. 2220     IF PD=1 THEN
  223. 2230       SYMBOL(100,120+MN1*20),"★",1,1,[40,40,80],,PSET
  224. 2240       MN1=MN1-1:IF MN1=-1 THEN MN1=3
  225. 2250       SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
  226. 2260       PLAY "t280v8o4c16":WAIT 15
  227. 2270     ELSE IF PD=5 THEN 
  228. 2280       SYMBOL(100,120+MN1*20),"★",1,1,[40,40,80],,PSET
  229. 2290       MN1=MN1+1:IF MN1=4 THEN MN1=0
  230. 2300       SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
  231. 2310       PLAY "t280v8o4c16":WAIT 15
  232. 2320     ENDIF
  233. 2330     IF PT=1 OR PT=2 OR PT=4 THEN
  234. 2340       IF MN1=0 THEN START=1
  235. 2350       IF MN1=1 THEN *ランキング表示
  236. 2360       IF MN1=2 THEN *コンフィグレーション
  237. 2370       IF MN1=3 THEN *タウンズOSに戻る
  238. 2380     ENDIF
  239. 2390   WEND 
  240. 2400   COURSE=1:PCMPLAY LETSGO%:WAIT 200
  241. 2410 RETURN
  242. 2420 *コンフィグレーション:'##########################################
  243. 2430   MN2=3:LINE (0,0)-(639,479),PSET,[40,40,80],BF
  244. 2440   SYMBOL (70,30),"CONFIGRATION",1,2,7,0,PSET,9
  245. 2450   SYMBOL (100,100),"動作モード",1,1,7,0,PSET,9
  246. 2460   IF MODE=1 THEN MD$="高速" ELSE MD$="互換"
  247. 2470   SYMBOL (200,100),MD$,1,1,7,0,PSET,9
  248. 2480   SYMBOL (100,130),"WAIT TIME",1,1,7,0,PSET,9
  249. 2490   IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
  250. 2500   SYMBOL (200,130),WT$,1,1,7,0,PSET,9
  251. 2510   SYMBOL (100,160),"設定をセーブする",1,1,7,0,PSET,9
  252. 2520   SYMBOL (100,190),"タイトルに戻る",1,1,7,0,PSET,9
  253. 2530   SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
  254. 2540   START=0:WHILE START<>1
  255. 2550     PD=PAD(1):PT=PTRIG(1)
  256. 2560     IF PD=1 THEN
  257. 2570       SYMBOL(80,100+MN2*30),"★",1,1,[40,40,80],,PSET
  258. 2580       MN2=MN2-1:IF MN2=-1 THEN MN2=3
  259. 2590       SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
  260. 2600       PLAY "t280v8o4c16":WAIT 15
  261. 2610     ELSE IF PD=5 THEN
  262. 2620       SYMBOL(80,100+MN2*30),"★",1,1,[40,40,80],,PSET
  263. 2630       MN2=MN2+1:IF MN2=4 THEN MN2=0
  264. 2640       SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
  265. 2650       PLAY "t280v8o4c16":WAIT 15
  266. 2660     ENDIF
  267. 2670     IF (PD=3 OR PD=7) AND MN2=0 THEN
  268. 2680       IF MODE=0 THEN MODE=1 ELSE MODE=0
  269. 2690       IF MODE=1 THEN MD$="高速" ELSE MD$="互換"
  270. 2700       LINE (200,100)-(231,115),PSET,[40,40,80],BF
  271. 2710       SYMBOL (200,100),MD$,1,1,7,0,PSET,9
  272. 2720       OUT &H5EC,MODE
  273. 2730       PLAY "t280v8o4c16":WAIT 15
  274. 2740     ELSE IF PD=3 AND MN2=1 THEN
  275. 2750       WT=WT+1:IF WT>99 THEN WT=99
  276. 2760       IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
  277. 2770       LINE (200,130)-(231,145),PSET,[40,40,80],BF
  278. 2780       SYMBOL (200,130),WT$,1,1,7,0,PSET,9:WAIT 8
  279. 2790     ELSE IF PD=7 AND MN2=1 THEN
  280. 2800       WT=WT-1:IF WT<0 THEN WT=0
  281. 2810       IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
  282. 2820       LINE (200,130)-(231,145),PSET,[40,40,80],BF
  283. 2830       SYMBOL (200,130),WT$,1,1,7,0,PSET,9:WAIT 8
  284. 2840     ELSE IF PT=1 AND MN2=2 THEN
  285. 2850       PLAY "t280v8o5g8c8"
  286. 2860       KILL CNFFILE$:OPEN "O",1,CNFFILE$:PRINT#1,MODE,WT:CLOSE #1
  287. 2870     ELSE IF PT=1 AND MN2=3 THEN
  288. 2880       START=1
  289. 2890     ENDIF
  290. 2900   WEND:WAIT 20:GOTO *復帰地点
  291. 2910 *変数設定2:'####################################################
  292. 2920   DD=0:TIM=0                         :'ゲームオ-バーのフラグ
  293. 2930   LAP=0:GLAP=1:CHK=2:GOAL=0          :'ラップとフラグ
  294. 2940   PX=119:PY=116:MH=192               :'プレイヤーの座標、方向
  295. 2950   MPX=3808:MPY=3344                  :'マップの座標
  296. 2960   X=(MPX)\16+20:Y=(MPY)\16+15        :'スリップ用の座標
  297. 2970   VV=10:VX=0:VY=0:PAA=400!           :'速度、x成分、y成分、加速度
  298. 2980   PVX=2800!:PZZ=72!             :'速度の上限、底上げ分
  299. 2990   PHN=8:PEB=.975!:PBR=.93!       :'ハンドル、エアブレーキ、ブレーキ
  300. 3000   MHI=MH+4 AND 255:MHP=INT(MHI/8):'プレイヤー表示用の方向
  301. 3010 RETURN
  302. 3020 *画面設定:'######################################################
  303. 3030   SCREEN@ 1:CLS:SPRITE ON:SPRITE SCREEN(0,0):SPRITE SCREEN 1
  304. 3040   WINDOW(0,0)-(383,255):VIEW(0,0)-(383,255)
  305. 3050   OUT &H440,&H1B,1:OUT &H442,&H3F,1
  306. 3060 RETURN
  307. 3070 *マップ読み込み:'################################################
  308. 3080   IF COURSE=1 THEN LOAD@ "cdr_map1.tif",(80,0)
  309. 3090   IF COURSE=2 THEN LOAD@ "cdr_map2.tif",(80,0)
  310. 3100   IF COURSE=3 THEN LOAD@ "cdr_map3.tif",(80,0)
  311. 3110   IF COURSE=4 THEN LOAD@ "cdr_map4.tif",(80,0)
  312. 3120 RETURN
  313. 3130 *マップ紹介:'####################################################
  314. 3140   SCREEN@ 1:WINDOW(0,0)-(383,255):VIEW(0,0)-(383,255)
  315. 3150   WR=1:START=0:WHILE START<>1
  316. 3160     IF WR=1 THEN
  317. 3170       IF COURSE=1 THEN
  318. 3180         MLAP=4:LOAD@ "cdr_map1.tif",(0,0)
  319. 3190         SYMBOL(50,60),"Course 1: 恐山スピードウェイ",1,1,7,0,PSET,9
  320. 3200         SYMBOL(140,110),"4周",1,1,7,0,PSET,9
  321. 3210         SYMBOL(60,150),"BEST TIME "+STR$(RTM(0))+"  "+RNA$(0),1,1,7,0,PSET,9
  322. 3220       ELSE IF COURSE=2 THEN
  323. 3230         MLAP=3:LOAD@ "cdr_map2.tif",(0,0)
  324. 3240         SYMBOL(50,60),"Course 2: 八甲田F1サーキット",1,1,7,0,PSET,9
  325. 3250         SYMBOL(140,110),"3周",1,1,7,0,PSET,9
  326. 3260         SYMBOL(60,150),"BEST TIME "+STR$(RTM(1))+"  "+RNA$(1),1,1,7,0,PSET,9
  327. 3270       ELSE IF COURSE=3 THEN
  328. 3280         MLAP=4:LOAD@ "cdr_map3.tif",(0,0)
  329. 3290         SYMBOL(50,60),"Course 3: 竜飛岬スピードウェイ",1,1,7,0,PSET,9
  330. 3300         SYMBOL(140,110),"4周",1,1,7,0,PSET,9
  331. 3310         SYMBOL(60,150),"BEST TIME "+STR$(RTM(2))+"  "+RNA$(2),1,1,7,0,PSET,9
  332. 3320       ELSE IF COURSE=4 THEN
  333. 3330         MLAP=4:LOAD@ "cdr_map4.tif",(0,0)
  334. 3340         SYMBOL(50,60),"Course 4: 岩木山F1サーキット",1,1,7,0,PSET,9
  335. 3350         SYMBOL(140,110),"4周",1,1,7,0,PSET,9
  336. 3360         SYMBOL(60,150),"BEST TIME "+STR$(RTM(3))+"  "+RNA$(3),1,1,7,0,PSET,9
  337. 3370       ENDIF
  338. 3380       SYMBOL(30,190),"←→でコース選択",2,2,[230,250,100],0,PSET,8
  339. 3390       WAIT 30
  340. 3400     ENDIF
  341. 3410     PD=PAD(1):PT=PTRIG(1)
  342. 3420     WR=0:IF PD=3 THEN
  343. 3430       COURSE=COURSE+1:IF COURSE=5 THEN COURSE=1
  344. 3440       PLAY "t280v8o4c16":WR=1:WAIT 15
  345. 3450     ELSE IF PD=7 THEN
  346. 3460       COURSE=COURSE-1:IF COURSE=0 THEN COURSE=4
  347. 3470       PLAY "t280v8o4c16":WR=1:WAIT 15
  348. 3480     ELSE IF PT=1 THEN
  349. 3490       PLAY "t280v8o4c16":START=1
  350. 3500     ELSE IF PT>=8 THEN
  351. 3510       GOTO *復帰地点
  352. 3520     ENDIF
  353. 3530   WEND
  354. 3540 RETURN
  355. 3550 'スプライト設定##################################################
  356. 3560 *パターン設定:'--------------------------------------------------
  357. 3570   SCREEN@ 1:CLS:OUT &HFDA0,&H3,1
  358. 3580   LOAD@ "sprite.tif",(0,0):DEF SPRITE 99,0
  359. 3590   FOR I=0 TO 31
  360. 3600     X=I*16+(I>15)*256
  361. 3610     Y=-(I>15)*16
  362. 3620     GET@A(X,Y)-(X+15,Y+15),PAT%:TOUMEI=0:GOSUB *透明化
  363. 3630     DEF SPRITE 0,I*4,PAT%,1:'---- 車のパターン(0-124)
  364. 3640   NEXT
  365. 3650 '--- 文字の設定 -------------------------------------------------
  366. 3660   CLS:LINE(0,0)-(319,239),PSET,1,BF
  367. 3670   SYMBOL (0, 0),"0123456789",1,1,7,0,PSET,9
  368. 3680   SYMBOL (0,20),"  Ready   Go!!!   Goal!   Final ",1,1,6,0,PSET,9
  369. 3690   SYMBOL (0,40)," LAP    1st   2nd   3rd   4th   5th ",1,1,6,0,PSET,9
  370. 3700   FOR I=0 TO 9
  371. 3710     GET@A (I*16,0)-(I*16+15,15),PAT%:TOUMEI=31:GOSUB *透明化
  372. 3720     DEF SPRITE 0,128+I*4,PAT%,1:'---- 数字のパターン(128-164)
  373. 3730   NEXT
  374. 3740   FOR I=0 TO 15
  375. 3750     GET@A (I*16,20)-(I*16+15,35),PAT%:TOUMEI=31:GOSUB *透明化
  376. 3760     DEF SPRITE 0,168+I*4,PAT%,1:'---- メッセージのパターン(168-228)
  377. 3770   NEXT
  378. 3780   FOR I=0 TO 17
  379. 3790     GET@A (I*16,40)-(I*16+15,55),PAT%:TOUMEI=31:GOSUB *透明化
  380. 3800     DEF SPRITE 0,232+I*4,PAT%,1:'---- ラップのパターン(232-300)
  381. 3810   NEXT
  382. 3820   CLS
  383. 3830 RETURN
  384. 3840 *キャラクタ設定:'------------------------------------------------
  385. 3850   DEF SPRITE 1,100,(PX,PY),4*MHP         :'---- プレイヤー(100)
  386. 3860   FOR I=0 TO 3
  387. 3870     DEF SPRITE 1,200+I*16,(0,0),168+I*16,4,1:'--- 200,+16,*3
  388. 3880   NEXT
  389. 3890   SPRITE 6,248,30,18
  390. 3900   FOR I=0 TO 5
  391. 3910     DEF SPRITE 1,300+I*12,(-30*(I<>0),18),232+I*12,3,1:'300,+12,*5
  392. 3920   NEXT
  393. 3930 RETURN
  394. 3940 *透明化:'--------------------------------------------------------
  395. 3950   FOR J=0 TO 255
  396. 3960     IF PAT%(J)=TOUMEI THEN PAT%(J)=-32768     :'---- 透明色
  397. 3970   NEXT
  398. 3980 RETURN
  399. 3990 *スクロール:'####################################################
  400. 4000   GET@A(MPX\16,MPY\16)-(MPX\16+39,MPY\16+29),MPT
  401. 4010   PUT@A(0,0)-(39,29),MPT,PSET,2,2
  402. 4020 RETURN
  403. 4030 *ランキングファイルのオープン:'##################################
  404. 4040   OPEN "R",2,RNKFILE$
  405. 4050   FIELD 2,8 AS NA$,8 AS NB$
  406. 4060   IF LOF(2)<2 THEN
  407. 4070     RESTORE *ランキングファイルのデフォルト
  408. 4080     FOR I=0 TO 3
  409. 4090       READ RNA$(I),RTM(I)
  410. 4100     NEXT
  411. 4110     GOSUB *ランキングファイルのセーブ
  412. 4120   ENDIF
  413. 4130 RETURN
  414. 4140 *ランキング表示:'################################################
  415. 4150   MN3=1
  416. 4160   LINE (0,0)-(639,479),PSET,[40,40,80],BF
  417. 4170   LINE(4,18)-(315,168),PSET,[80,80,0],BF
  418. 4180   LINE(8,22)-(311,164),PSET,[100,100,0],BF
  419. 4190   SYMBOL(24,30),"--------- RANKING ---------",1,1,6,0,PSET,1
  420. 4200   SYMBOL(40,60),"Course    Time         Player",1,1,6,0,PSET,1
  421. 4210   FOR I=0 TO 3
  422. 4220     A1=RTM(I)\1000:A2=(RTM(I)-A1*1000)\100
  423. 4230     A3=(RTM(I)-A1*1000-A2*100)\10:A4=RTM(I)-A1*1000-A2*100-A3*10
  424. 4240     TIM$=CHR$(48+A1)+CHR$(48+A2)+CHR$(48+A3)+CHR$(48+A4)
  425. 4250     SYMBOL( 48,80+I*20),STR$(I+1),1,1,6,0,PSET,1
  426. 4260     SYMBOL(120,80+I*20),TIM$,1,1,6,0,PSET,1
  427. 4270     SYMBOL(216,80+I*20),RNA$(I),1,1,6,0,PSET,1
  428. 4280   NEXT
  429. 4290   SYMBOL (100,180),"ランキングをセーブする",1,1,7,0,PSET,1
  430. 4300   SYMBOL (100,200),"タイトルに戻る",1,1,7,0,PSET,1
  431. 4310   SYMBOL (80,180+MN3*20),"★",1,1,[230,250,100],0,PSET,1
  432. 4320   START=0:WHILE START<>1               :'パッド待ち
  433. 4330     PD=PAD(1):PT=PTRIG(1)
  434. 4340     IF PD=1 OR PD=5 THEN
  435. 4350       SYMBOL (80,180+MN3*20),"★",1,1,[40,40,80],0,PSET,1
  436. 4360       IF MN3=1 THEN MN3=0 ELSE MN3=1
  437. 4370       SYMBOL (80,180+MN3*20),"★",1,1,[230,250,100],0,PSET,1
  438. 4380       PLAY "t280v8o4c16":WAIT 15
  439. 4390     ELSE IF PT=1 THEN
  440. 4400       IF MN3=0 THEN
  441. 4410         PLAY "t280v8o5g8c8"
  442. 4420         GOSUB *ランキングファイルのセーブ:WAIT 20
  443. 4430       ELSE
  444. 4440         START=1
  445. 4450       ENDIF
  446. 4460     ENDIF
  447. 4470   WEND
  448. 4480 WAIT 10:GOTO *復帰地点
  449. 4490 *ネームエントリー:'##############################################
  450. 4500   RNA$(COURSE-1)="":NM=10:NNN=0:'Nm=文字の種類,nnn=入力した文字数
  451. 4510   GET@A(146,170)-(176,201),PATG1%
  452. 4520   SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1
  453. 4530   SYMBOL(127,152),"________",1,1,6,0,PSET,1
  454. 4540   GET@A(127,150)-(193,165),PATG2%
  455. 4550   '
  456. 4560   START=0:WHILE START<>1
  457. 4570   OT=PT:PD=PAD(1):PT=PTRIG(1)
  458. 4580   IF PD=1 OR PD=7 THEN
  459. 4590     NM=NM-1:IF NM<0 THEN NM=66
  460. 4600     PUT@A(146,170)-(176,201),PATG1%
  461. 4610     SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1:WAIT 9
  462. 4620   ELSE IF PD=5 OR PD=3 THEN
  463. 4630     NM=NM+1:IF NM>66 THEN NM=0
  464. 4640     PUT@A(146,170)-(176,201),PATG1%
  465. 4650     SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1:WAIT 9
  466. 4660   ELSE IF PT=1 AND PT<>OT AND NNN<8 THEN
  467. 4670     RNA$(COURSE-1)=RNA$(COURSE-1)+CH$(NM):NNN=NNN+1
  468. 4680     PUT@A(127,150)-(193,165),PATG2%
  469. 4690     SYMBOL(127,150),RNA$(COURSE-1),1,1,6,0,PSET,1
  470. 4700     PLAY "t280v8o4c16"
  471. 4710   ELSE IF PT=2 AND PT<>OT AND NNN>0 THEN
  472. 4720     NNN=NNN-1
  473. 4730     RNA$(COURSE-1)=LEFT$(RNA$(COURSE-1),NNN)
  474. 4740     PUT@A(127,150)-(193,165),PATG2%
  475. 4750     SYMBOL(127,150),RNA$(COURSE-1),1,1,6,0,PSET,1
  476. 4760     PLAY "t280v8o4c16"
  477. 4770   ELSE IF PT=4 OR (PT=1 AND PT<>OT AND NNN=8) THEN
  478. 4780     PLAY"t280v10o5c16d16e16f16g16"
  479. 4790     WAIT 100
  480. 4800     START=1
  481. 4810   ENDIF
  482. 4820   WEND
  483. 4830 RETURN
  484. 4840 *ランキングファイルのロード:'####################################
  485. 4850   FOR I=1 TO 4
  486. 4860     GET 2,I
  487. 4870     RNA$(I-1)=NA$:RTM(I-1)=VAL(NB$)
  488. 4880   NEXT
  489. 4890 RETURN
  490. 4900 *ランキングファイルのセーブ:'####################################
  491. 4910   FOR I=1 TO 4
  492. 4920     LSET NA$=RNA$(I-1):LSET NB$=STR$(RTM(I-1))
  493. 4930     PUT 2,I
  494. 4940   NEXT
  495. 4950 RETURN
  496. 4960 *タウンズOSに戻る:'############################################
  497. 4970   SYMBOL (40,60),"Bye!",4,7,[230,250,100],0,PSET,9
  498. 4980   PCMPLAY BYE%:WAIT 200:OUT &H5EC,TMODE
  499. 4990 END
  500. 5000 *エラー処理:'####################################################
  501. 5010 IF ERR=63 THEN
  502. 5020   OPEN "O",1,CNFFILE$
  503. 5030   MODE=0:WT=1              :'初期状態(互換、wait=1)
  504. 5040   PRINT #1,MODE,WW
  505. 5050   CLOSE
  506. 5060   RESUME *コンフィグファイル作成から復帰
  507. 5070 ELSE
  508. 5080   BEEP:CLS:SCREEN@ 0
  509. 5090   LOCATE 23,11:PRINT "予測出来ないエラーが起こりました"
  510. 5100   LOCATE 24,13:PRINT ERL;"行。エラーナンバー";ERR;"です。"
  511. 5110   LOCATE 8,14:PRINT "エラーナンバーについてはF-BAISC386V2.1のマニュアルを見てください。"
  512. 5120   LOCATE 19,16:PRINT "パッドのボタンでTOWNS-OSに戻ります。"
  513. 5130   WHILE PTRIG(1)=0:WAIT 1:WEND
  514. 5140 ENDIF
  515. 5150 END
  516. 5160 *ランキングファイルのデフォルト:'################################
  517. 5170 'DATA       rna$,   rtm
  518. 5180  DATA "IKENO.I ",  9999
  519. 5190  DATA "HIROFUMI",  9999
  520. 5200  DATA "HARUHIKO",  9999
  521. 5210  DATA "HIROTO.K",  9999
  522.